package com.hks360.car_treasure.internet.request_net.nohttp.base_layer;


import com.hks360.car_treasure.internet.net_encrypt.Des;
import com.hks360.car_treasure.internet.request_net.constant.NetConstant;
import com.hks360.car_treasure.internet.request_net.nohttp.user_interface.HttpCallback;
import com.hks360.car_treasure.util.LogUtil;
import com.hks360.nohttp.NoHttp;
import com.hks360.nohttp.Request;
import com.hks360.nohttp.RequestMethod;
import com.hks360.nohttp.RequestQueue;
import com.hks360.nohttp.download.DownloadQueue;

import java.text.MessageFormat;


/**
 * Created by rwq on 2016/4/14.
 */

//HTTP中的GET，POST，PUT，DELETE就对应着对这个资源的查，改，增，删4个操作
    /**
     * 功能1：单列模式，提供的获取实例的方法
     * 功能2：设置访问网络的URL
     * 功能3：普通的GET请求
     * 功能4：普通的POST请求
     * 功能5：取消这个what标记的所有请求
     * 功能6：取消队列中所有请求
     * 功能7：退出app时停止所有请求
     *
     * */
public class CallServer {
    private static CallServer callServer;//单例模式
    private RequestQueue requestQueue;//请求队列
    private DownloadQueue downloadQueue;//下载队列
    private String url;//URL
    private static final String DATA = "data";//参数设置


    private CallServer() {
        requestQueue = NoHttp.newRequestQueue();
        downloadQueue = NoHttp.newDownloadQueue();
    }

    public void setUrl(String actionName) {
        url = NetConstant.BASE_URL;
        this.url = MessageFormat.format(url,actionName);;
    }
    //单列模式，提供的获取实例的方法
    public synchronized static CallServer getInstance() {
        if (callServer == null)
            callServer = new CallServer();
        return callServer;
    }
    /**
     * 普通的GET请求
     * @param what		 用于标志请求
     * @param callback	 结果回调对象
     */
    public void get(int what,HttpCallback<String> callback) {
        Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
        add(what, request,callback);
    }
    /**
     *  添加一个请求到请求队列
     * @param what 		 用来标志请求, 当多个请求使用同一个{@link HttpCallback}时, 在回调方法中会返回这个what
     * @param request	     请求对象
     * @param callback	     结果回调对象
     */
    protected <T> void add(int what,Request<T> request,HttpCallback<T> callback) {
        requestQueue.add(what, request,new HttpResponseListener<T>(callback));
    }

    /**
     * 普通的POST请求
     * @param what		 用于标志请求
     * @param callback	 结果回调对象
     */
    public void post(int what,String jsonStr,HttpCallback<String> callback) {
        Request<String> request = NoHttp.createStringRequest(url, RequestMethod.POST);
        LogUtil.e("RWQ", jsonStr);
        LogUtil.e("RWQ", Des.encrypt(jsonStr));
        request.add(DATA, Des.encrypt(jsonStr));
        add(what,request,callback);
    }
    /**
     * 取消这个what标记的所有请求
     */
    public void cancelBySign(Object what) {
        requestQueue.cancelBySign(what);
    }

    /**
     * 取消队列中所有请求
     */
    public void cancelAll() {
        requestQueue.cancelAll();
    }

    /**
     * 退出app时停止所有请求
     */
    public void stopAll() {
        requestQueue.stop();
    }

}
